package com.example.wechar.context;

import com.example.wechar.service.IMessage;
import com.example.wechar.utils.MessageType;

import java.util.HashMap;
import java.util.Map;

/**
 * 消息处理核心工厂类.
 */
public class ContextMessageFactory {
    /**
     * 消息处理集合类key:消息类型, value:对应消息类型的处理方法
     */
    private Map<MessageType, IMessage> messageMap = new HashMap<>();


    public Map<MessageType,IMessage> getMessageMap(){
        return messageMap;
    }

    /**
     * settor
     * @param messageMap 消息处理集合
     */
    public void setMessageMap(Map<MessageType, IMessage> messageMap){
        this.messageMap=messageMap;
    }

    /**
     *  builder
     * @param messageType 消息类型
     * @param iMessage 对应消息类型处理类
     */
    public ContextMessageFactory builder(MessageType messageType,IMessage iMessage){
        //如果存在重复的key,那么putIfAbsent不会放入值
        this.messageMap.putIfAbsent(messageType,iMessage);
        return this;
    }

    /**
     * 消息处理方法
     * @param messageType 消息类型
     * @param param 处理参数(数据)
     * @return
     */
    public String doAction(MessageType messageType,Map<String,Object> param){
        return this.messageMap.get(messageType).handler(param);
    }
}
